<?php
//Ultima verificacion: 13-10-2014 ; 21-11-2014 ; 20-02-2015
class M_persona extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las personas existentes menos las borradas
	function buscar(){
		$consulta = $this->db->query("SELECT persona.*,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											(SELECT localidad.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS localidad,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											DATE_FORMAT(persona.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(persona.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM persona
									  WHERE persona.estado<>-1
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
			
	//Este metodo se utiliza cuando queremos obtener las personas activas
	function buscarActivos(){
		$consulta = $this->db->query("SELECT persona.*,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											(SELECT localidad.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS localidad,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											DATE_FORMAT(persona.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada,
											DATE_FORMAT(persona.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM persona
									  WHERE persona.estado=1
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar una persona
	function eliminar($idPersona=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `persona`
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `persona`.`idPersona` = " . $this->db->escape($idPersona) . " LIMIT 1");
		return($this->db->affected_rows());
	}
		
	//Este metodo se utiliza para crear una persona
	function crear($apellido=null, $nombre=null, $abreviatura=null, $idTipoDocumento=null, $numeroDocumento=null, $fechaNacimiento=null, $idLocalidad=null, $domicilio=null, $telefonoFijo=null, $telefonoCelular=null, $email=null, $facebook=null, $idArchivoFoto=null, $sexo=null, $descripcion=null, $estado=null, $idCreador=null, $hash=null){
		$this->db->query("INSERT INTO `persona` (`idPersona` ,`apellido`,`nombre`, `abreviatura`, `idTipoDocumento`, `numeroDocumento`, `fechaNacimiento`, `idLocalidad`, `domicilio`, `telefonoFijo`, `telefonoCelular`, `email`, `facebook`, `idArchivoFoto`, `sexo`, `descripcion`, `estado`, `fechaCreacion`, `idCreador`, `hash`) VALUES 
												(NULL,".$this->db->escape($apellido).",".$this->db->escape($nombre).",".$this->db->escape($abreviatura).",".$this->db->escape($idTipoDocumento).",".$this->db->escape($numeroDocumento).",".$this->db->escape($fechaNacimiento).",".$this->db->escape($idLocalidad).",".$this->db->escape($domicilio).",".$this->db->escape($telefonoFijo).",".$this->db->escape($telefonoCelular).",".$this->db->escape($email).",".$this->db->escape($facebook).",".$this->db->escape($idArchivoFoto).",".$this->db->escape($sexo).",".$this->db->escape($descripcion).",".$this->db->escape($estado).",now(),".$this->db->escape($idCreador).",".$this->db->escape($hash).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando inicias sesion, para obtener los datos de la persona que lo hizo, para modificar a una persona o bien para validar que la persona
	//pasada por la url sea existente.
	function get($idPersona=null){
		$consulta = $this->db->query('SELECT persona.*, DATE_FORMAT(persona.fechaNacimiento,"%d/%m/%Y") AS fechaNacimientoFormateada, DATE_FORMAT(persona.fechaNacimiento,"%d-%m-%Y") AS fechaNacimientoFormateada2,
											(SELECT localidad.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS localidad,
											(SELECT provincia.idProvincia FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS idProvincia,
											(SELECT provincia.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS provincia,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto
									  FROM persona
									  WHERE persona.estado<>-1 AND persona.idPersona='.$this->db->escape($idPersona).' 
									  LIMIT 1');
		return($consulta);
	}
	
	//Este metodo se utiliza cuando una persona quiere dejar de recibir correos con las ultimas novedades
	function getPorHash($hash=null){
		$consulta = $this->db->query('SELECT persona.*
									  FROM persona
									  WHERE persona.estado=1 AND persona.hash='.$this->db->escape($hash).' 
									  LIMIT 1');
		return($consulta);
	}
		
	//Este metodo se utiliza cuando queremos devolver la persona contigua a una en particular usado generalmente en el formulario de modificar
	function getContiguo($idPersona=null, $cant=null){
		do{
			$idPersona+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM persona
										  WHERE idPersona=".$this->db->escape($idPersona)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1');
		
		return($consulta->row()->idPersona);
	}
		
	//Este metodo se utiliza para modificar una persona
	function modificar($idPersona=null, $apellido=null, $nombre=null, $abreviatura=null, $idTipoDocumento=null, $numeroDocumento=null, $fechaNacimiento=null, $idLocalidad=null, $domicilio=null, $telefonoFijo=null, $telefonoCelular=null, $email=null, $facebook=null, $idArchivoFoto=null, $sexo=null, $descripcion=null, $estado=null){
		$consulta = $this->db->query("UPDATE `persona` 
									 SET `apellido` = ". $this->db->escape($apellido) .",
										 `nombre` = ". $this->db->escape($nombre) .",
										 `abreviatura` = ". $this->db->escape($abreviatura) .",
										 `idTipoDocumento` = ". $this->db->escape($idTipoDocumento) .",
										 `numeroDocumento` = ". $this->db->escape($numeroDocumento) .",
										 `fechaNacimiento` = ". $this->db->escape($fechaNacimiento) .",
										 `idLocalidad` = ". $this->db->escape($idLocalidad) .",
										 `domicilio` = ". $this->db->escape($domicilio) .",
										 `telefonoFijo` = ". $this->db->escape($telefonoFijo) .",
										 `telefonoCelular` = ". $this->db->escape($telefonoCelular) .",
										 `email` = ". $this->db->escape($email) .",
										 `facebook` = ". $this->db->escape($facebook) .",
										 `idArchivoFoto` = ". $this->db->escape($idArchivoFoto) .",
										 `sexo` = ". $this->db->escape($sexo) .",
										 `descripcion` = ". $this->db->escape($descripcion) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `persona`.`idPersona`=".$this->db->escape($idPersona)." LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para actualizar que una persona no quiere recibir mas correos.
	function modificarEnviarEmails($idPersona=null, $enviarEmails=null){
		$consulta = $this->db->query("UPDATE `persona` 
									 SET `enviarEmails` = ". $this->db->escape($enviarEmails) ."
							         WHERE `persona`.`idPersona`=".$this->db->escape($idPersona)." LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para hacer una consulta generica a la base de datos (Usado en los mensajes)
	function consultar($consultaOriginal=null){
		$consulta = $this->db->query($consultaOriginal);
		return($consulta);
	}
}
?>